package com.tpe.model.service;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Named;

import com.tpe.model.cloud.QueueUtil;
import com.tpe.model.entity.Usuario;
import com.tpe.model.enums.QueueEnum;
import com.tpe.model.repository.UsuarioRepository;
import com.tpe.model.util.JsonUtil;
import com.tpe.model.util.json.JSONObject;

@Stateless
@Named(value = "usuarioService")
public class UsuarioServiceImpl implements UsuarioService {

	@EJB
	private UsuarioRepository usuarioRepository;

	@Override
	public synchronized Usuario salvar(Usuario usuario) throws Exception {
		try {
			usuario = usuarioRepository.criar(usuario);
			QueueUtil.sendMessage(JsonUtil.usuarioToJson(usuario), QueueEnum.QUEUE_SEND_CONFIRMATION.getUrl());

			return usuario;

		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception();
		}
	}

	@Override
	public Usuario atualizar(Usuario usuario) throws Exception {
		try {
			return usuarioRepository.atualizar(usuario);

		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception();
		}
	}

	@Override
	public Collection<Usuario> pesquisar(Usuario usuario) throws Exception {
		return usuarioRepository.obterPorExemplo(usuario);
	}
	
	@Override
	public boolean verificaDuplicado(Usuario user) throws Exception {
		return usuarioRepository.verificaDuplicado(user);
	}
	
	@Override
	public Usuario obterPorEmail(Usuario user) throws Exception {
		return usuarioRepository.obterPorEmail(user);
	}
	
	@Override
	public Collection<Usuario> obterAtivos() throws Exception {
		return usuarioRepository.obterAtivos();
	}
	
	@Override
	public void enviarUsuarios() throws Exception {
		List<Usuario> users = new ArrayList<Usuario>(obterAtivos());
		List<JSONObject> listSending = new ArrayList<JSONObject>();
		
		if(users != null && !users.isEmpty()){
			for(Usuario u : users){
				JSONObject j = new JSONObject();
				j.put("nome", u.getNome());
				j.put("email", u.getEmail());
				
				listSending.add(j);
			}

			QueueUtil.sendMessage(listSending.toString(), QueueEnum.QUEUE_SEND_USERS.getUrl());
		}
	}
}